package com.naiterui.ehp.ps.sms.utils.constants;

import java.util.Date;

import com.naiterui.ehp.bp.utils.date.DateUtil;
import com.naiterui.ehp.bp.utils.encypt.MD5;

/**
 * Redis操作相关常量
 *
 * @author
 * @since 1.0.0
 */
public class RedisConstants {
    public static final int IP_LIMIT_CACHE_DATE = 1 * 60;// IP限制超时时长，1分钟
    public static final int SAME_PHONE_LIMIT_CACHE_DATE = 24 * 60 * 60;// 同一手机号请求限制超时时长，一天
    public static final int SAME_TEMPLATE_LIMIT_CACHE_DATE = 24 * 60 * 60;// 同一模板同一手机号请求限制超时时长，一天
    public static final int MSG_COUNT_CACHE_DATE = 35 * 24 * 60 * 60;// 发送短信记录数超时时间 35天

    private static final String REDIS_SMS_BASE = "sms|";// REDIS基础路径
    private static final String REDIS_SMS_CURRENT_PLATFORM = "current_platform";// 当前在用短信平台
    private static final String REDIS_SMS_IPLIMIT_PREFIX = "ip_limit_";// ip 限制前缀
    private static final String REDIS_SMS_PHONE_LIMIT_PREFIX = "phone_limit_";// 同一手机号请求限制前缀
    private static final String REDIS_SMS_TEMPLATE_LIMIT_PREFIX = "template_limit_";// 同一模板同一手机号请求限制前缀
    private static final String REDIS_SMS_TOKEN_PREFIX = "token_";// 部门对应的token前缀
    private static final String REDIS_SMS_MSG_COUNT_PREFIX = "msg_count_";// 部门短信发送量前缀
    private static final String REDIS_SMS_TEMPLATE_PREFIX = "template_";// 模板对应的redis key前缀
    private static final String REDIS_SMS_REQUEST_MUCH = "rquest_much_flag"; // 请求太频繁标志

    public static final String INCR_INIT_COUNT = "1"; // 自增数字初始化时设置值

    /******************************** 订阅消息设置 **************************************/
    public static final String PUB_CHANNEL_CURRENT_PLATFORM = REDIS_SMS_BASE + "pub_currentplatform";// 当前在用频道订阅消息
    public static final String PUB_CHANNEL_DEPT = REDIS_SMS_BASE + "pub_dept";// 当前在用频道订阅消息
    public static final String PUB_CHANNEL_SIGNATURE = REDIS_SMS_BASE + "pub_signature";// 签名信息订阅消息

    public static final String REDIS_KEY_SHIELD_SMS = REDIS_SMS_BASE + "shield_list";

    /**
     * 获取当前在用短信平台KEY
     * RedisConstants.getCurrentPlatformCacheKey()
     *
     * @return
     *
     * @Author
     * @Date 2017年7月24日
     * @since 1.0.0
     */
    public static String getCurrentPlatformCacheKey() {
        return REDIS_SMS_BASE + REDIS_SMS_CURRENT_PLATFORM;
    }

    /**
     * 获取ip限制的REDIS KEY
     * RedisConstants.getIpLimitCacheKey()
     *
     * @param ip
     *
     * @return
     *
     * @Author
     * @Date 2017年7月27日
     * @since 1.0.0
     */
    public static String getIpLimitCacheKey(String ip) {
        return REDIS_SMS_BASE + REDIS_SMS_IPLIMIT_PREFIX + MD5.md5(ip);
    }

    /**
     * 获取同一手机号码同一天请求数的REDIS KEY
     * RedisConstants.getPhoneCacheKey()
     *
     * @param phone
     *
     * @return
     *
     * @Author
     * @Date 2017年8月2日
     * @since 1.0.0
     */
    public static String getPhoneCacheKey(String phone) {
        String nowDay = DateUtil.parseDateToString(new Date(), DateUtil.MONTH_DAY_FORMAT);
        StringBuffer buffer = new StringBuffer();
        buffer.append(phone).append("_").append(nowDay);
        String md5Str = MD5.md5(buffer.toString());
        return REDIS_SMS_BASE + REDIS_SMS_PHONE_LIMIT_PREFIX + md5Str;
    }

    /**
     * 获取同一模板同一手机号码每天请求数的REDIS KEY
     * RedisConstants.getTemplateLimitCacheKey()
     *
     * @param templateId
     * @param phone
     *
     * @return
     *
     * @Author
     * @Date 2017年8月2日
     * @since 1.0.0
     */
    public static String getTemplateLimitCacheKey(Integer templateId, String phone) {
        String nowDay = DateUtil.parseDateToString(new Date(), DateUtil.MONTH_DAY_FORMAT);
        StringBuffer buffer = new StringBuffer();
        buffer.append(templateId).append("_").append(phone).append("_").append(nowDay);
        String md5Str = MD5.md5(buffer.toString());
        return REDIS_SMS_BASE + REDIS_SMS_TEMPLATE_LIMIT_PREFIX + md5Str;
    }

    /**
     * 获取token的key
     * RedisConstants.getTokenCacheKey()
     *
     * @param appId
     *
     * @return
     *
     * @Author
     * @Date 2017年7月27日
     * @since 1.0.0
     */
    public static String getTokenCacheKey(String appId) {
        return REDIS_SMS_BASE + REDIS_SMS_TOKEN_PREFIX + appId;
    }

    /**
     * 根据部门id，月份获取部门短信发送量KEY
     * RedisConstants.getMsgCountCacheKey()
     *
     * @param month
     *
     * @return
     *
     * @Author
     * @Date 2017年7月27日
     * @since 1.0.0
     */
    public static String getMsgCountCacheKey(Integer platformId, String month) {
        StringBuffer buffer = new StringBuffer();
        buffer.append(REDIS_SMS_BASE).append(REDIS_SMS_MSG_COUNT_PREFIX).append(platformId).append("_").append(month);
        return buffer.toString();
    }

    /**
     * 根据平台，部门id，签名，月份获取部门短信发送量KEY
     * RedisConstants.getMsgCountCacheKeyWithSignature()
     *
     * @param platformId
     * @param signatureId
     * @param month
     *
     * @return
     *
     * @Author
     * @Date 2018年7月31日
     * @since 1.0.0
     */
    public static String getMsgCountCacheKeyWithSignature(Integer platformId, Integer signatureId, String month) {
        StringBuffer buffer = new StringBuffer();
        buffer.append(REDIS_SMS_BASE).append(REDIS_SMS_MSG_COUNT_PREFIX).append(platformId).append("_")
            .append(signatureId)
              .append("_").append(month);
        return buffer.toString();
    }

    /**
     * 获取频繁请求标志
     * RedisConstants.getRequestMuchCacheKey()
     *
     * @return
     *
     * @Author
     * @Date 2017年7月27日
     * @since 1.0.0
     */
    public static String getRequestMuchCacheKey() {
        return REDIS_SMS_BASE + REDIS_SMS_REQUEST_MUCH;
    }

    /**
     * 获取模板的REDIS KEY
     * RedisConstants.getTemplateCacheKey()
     *
     * @param platformID
     * @param templateId
     *
     * @return
     *
     * @Author
     * @Date 2017年8月11日
     * @since 1.0.0
     */
    public static String getTemplateCacheKey(Integer platformID, Integer templateId) {
        StringBuffer buffer = new StringBuffer();
        buffer.append(platformID).append("_").append(templateId);
        String md5Str = MD5.md5(buffer.toString());
        return REDIS_SMS_BASE + REDIS_SMS_TEMPLATE_PREFIX + md5Str;
    }
}
